package com.broada.apm.logic;

import java.util.HashMap;
import java.util.List;

import com.broada.apm.entity.AO;
import com.broada.apm.entity.ApplicationSystem;
import com.broada.apm.entity.Relation;
import com.broada.apm.entity.Service;
import com.broada.apm.entity.TopoNode;

/**
 * 
 * 
 * @author liss Create By 2015年1月27日 上午10:48:16
 */
public interface ApplicationLogic {

	/**
	 * 查询系统列表
	 * 
	 * @return
	 */
	public List<ApplicationSystem> queryApplications();

	/**
	 * 根据id查询系统
	 * 
	 * @param id
	 * @return
	 */
	public ApplicationSystem queryApplicationById(String id, String panelId);
	/**
	 * 查找应用系统基本信息
	  * @Title: getApplicationById
	  * @Description: 
	  * @param @param appId
	  * @param @return
	  * @return Application
	  * @throws
	 */
	public ApplicationSystem getApplicationInfoById(String appId);


	/**
	 * 添加系统名称和apdex值
	 * 
	 * @param map
	 */
	public void addApplicationNameAndApdex(HashMap<String, String> map) throws Exception;

	/**
	 * 添加系统名称和apdex值
	 * 
	 * @param map
	 */
	public void updateApplicationNameAndApdex(HashMap<String, String> map) throws Exception;

	/**
	 * 删除系统
	 * 
	 * @param id
	 */
	public void deleteApplicationById(String id);

	/**
	 * 保存和添加拓扑图信息
	 * 
	 * @param app
	 * @return
	 * @throws Exception 
	 */
	public TopoNode saveApplicationTopology(String appId, ApplicationSystem app) throws Exception;

	/**
	 * 拓扑图节点修改，添加，保存操作
	 * 
	 * @param appId
	 * @param list
	 * @return
	 * @throws Exception 
	 */
	public List<Service> saveTopologyNodesAndCluster(String appId, List<Service> list, String panelId) throws Exception;

	/**
	 * 拓扑图删除节点
	 * 
	 * @param appId
	 * @param nodeIds
	 */
	public boolean deleteApplicationTopologyNodesByNodeIds(String appId, String nodeId);

	/**
	 * 获取拓扑图添加的节点关系
	 * 
	 * @param appId
	 * @param nodeIds
	 * @return
	 */
	public List<Relation> queryApplicationTopologyRelations(String appId, String[] nodeIds);

	/**
	 * 更换应用顺序
	 * @param appid1
	 * @param appid2
	 * @return
	 */
	public boolean changeApplicationOrder(String appid1, String appid2);
	/**
	 * 查询
	 * @param appId
	 * @param panelId 
	 * @return
	 */
	public List<AO> queryAOSByAppId(String appId, String panelId);

	/**
	 * 获取当前应用系统的所有协议
	 * @param appId
	 * @return
	 */
	public List<String> queryApplicaitonProtocals(ApplicationSystem application);

	/**
	 * 获取当前应用系统的所有节点
	 * @param application
	 * @return
	 */
	public List<String> queryApplicaitonIps(ApplicationSystem application);

	/**
	 * 根据应用系统名称获取应用
	 * @param appName
	 * @return 
	 */
	public com.broada.apm.model.ApplicationSystem getApplicationByName(String appName);
	
	/**
	 * 根据条件查询应用系统
	 * @return
	 */
	public List<ApplicationSystem> getApplicationByCondition(boolean inOverview, String keyWord);

	/**
	 * 应用系统显示在交易总览中或从其中删除
	 * @param application
	 */
	public void updateAppOverviewStatus(ApplicationSystem application);

	/**
	 * 保存交易总览页面上的所有应用系统
	 * @param appIds
	 */
	public void saveAppsInOverview(List<String> appIds);

	public boolean changeBusinessApplicationOrder(String string, String string2);

	/**
	 * 根据id查找应用系统
	 * @param appIds
	 * @return
	 */
	public List<ApplicationSystem> queryApplicationsByIds(String[] appIds);

	public com.broada.apm.model.ApplicationSystem getApplicationById(String appId);

	public List<String> queryApplicationIdsBySystem(String appId);
}
